package org.jiuling.wechat.officialaccount.exception.enums;

import org.jiuling.basics.converter.StringConvert;
import org.jiuling.basics.enums.annotations.EnumInfo;
import org.jiuling.basics.exception.BasicsException;
import org.jiuling.basics.util.EnumUtil;
import org.jiuling.wechat.officialaccount.exception.WeChatOfficialAccountException;

/**
 * 错误代码枚举
 * @author 紫灵
 * @date 2024年11月25日 00时06分50秒
 */
@EnumInfo(name = "错误代码")
public enum ErrorCodeEnum {

    SYSTEM_BUSY(-1,"系统繁忙，此时请开发者稍候再试"),
    APP_SECRET_ERROR(40001,"AppSecret错误或者AppSecret不属于这个公众号，请开发者确认AppSecret的正确性"),
    GRANT_TYPE_FIELD_ERROR(40002,"请确保grant_type字段值为client_credential"),
    IP_ADDRESS_NOT_ON_WHITELIST(40164,"调用接口的IP地址不在白名单中，请在接口IP白名单中进行设置。"),
    APPSECRET_HAS_BEEN_FROZEN(40243,"AppSecret已被冻结，请登录MP解冻后再次调用。"),
    NEED_POST_REQUEST(43002,"需要POST请求"),
    IP_REQUIRES_CONFIRMATION(89503,"此IP调用需要管理员确认,请联系管理员"),
    IP_WAITING_CONFIRMATION(89501,"此IP正在等待管理员确认,请联系管理员"),
    IP_HAS_BEEN_REJECTED_TWICE_WITHIN_TWENTY_FOUR_HOURS(89506,"24小时内该IP被管理员拒绝调用两次，24小时内不可再使用该IP调用"),
    IP_HAS_BEEN_REJECTED_ONCE_WITHIN_ONE_HOUR(89507,"1小时内该IP被管理员拒绝调用一次，1小时内不可再使用该IP调用"),
    ;
    /** 错误代码 */
    private final int code;
    /** 提示消息 */
    private final String describe;

    public String getDescribe() {
        return describe;
    }

    public int getCode() {
        return code;
    }

    ErrorCodeEnum(int code, String describe) {
        this.code = code;
        this.describe = describe;
    }

    /**
     * 通过代码对应的说明
     * @param code 代码
     * @return 枚举
     */
    public static String getDescribeByCode(int code) throws WeChatOfficialAccountException {
        try {
            return EnumUtil.valueOfEnum(ErrorCodeEnum.class,code,"code").describe;
        } catch (BasicsException e) {
            throw new WeChatOfficialAccountException(StringConvert.format("错误代码{}不存在！","{}",code));
        }
    }


}
